package cn.mesmile.amqp.demo;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.nio.charset.StandardCharsets;

/**
 * @author SuperZheng
 */
public class Send {

  private final static String QUEUE_NAME = "hello";

    /**
     *   direct模式 ，在绑定 队列的时候， quene 和 Routing key 所填写的值必须一致
     *
     *   当交换器类型为 fanout 的时候，在绑定队列的时候 Routing key 选填
     *
     */
  public static void main(String[] argv) throws Exception {


      ConnectionFactory factory = new ConnectionFactory();
      factory.setHost("39.105.17.127");
      factory.setUsername("guest");
      factory.setPassword("guest");
      factory.setPort(5672);
      factory.setVirtualHost("/dev");


      //JDK7语法 或自动关闭 connnection和channel
      try (Connection connection = factory.newConnection();

           Channel channel = connection.createChannel()) {
          /*
           * 队列名称
           * 持久化配置：mq重启后还在
           * 是否独占：只能有一个消费者监听队列；当connection关闭是否删除队列，一般是false，发布订阅是独占
           * 自动删除: 当没有消费者的时候，自动删除掉，一般是false
           * 其他参数
           *
           * 队列不存在则会自动创建，如果存在则不会覆盖，所以此时的时候需要注意属性
           */
          channel.queueDeclare(QUEUE_NAME, false, false, false, null);
          String message = "Hello World!";
          /*
           * 交换机名称：不写则是默认的交换机，那路由健需要和队列名称一样才可以被路由，
           * 路由健名称
           * 配置信息
           * 发送的消息数据：字节数组
           */
          channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
          System.out.println(" [x] Sent '" + message + "'");
      }


  }


}